/**
 *
 * Open RingBuffer for tool use.
 *
 * @open_ringbuffer.h
 *
 * $Author: ycl $
 * $Date: 2023-7-31 $
 * $Revision: 001 $
 *
 * @remarks
 * 2023-7-31：str_buffer base thought ref. from: https://gitee.com/netube/RingBuffer/blob/main/ring_buffer.c
 */
#ifndef _OPEN_RINGBUFFER_H_
#define _OPEN_RINGBUFFER_H_

#ifdef OPRB_UTEST
    #ifdef __cplusplus
    extern "C"{
    #endif
#endif

#define OPRB_LOG_LEN_OVER_RECV_BUFF_LEN -5    /* 所读取的LOG行字符数量超出接收buffer大小 */
#define OPRB_LOG_ITEM_EMPTY -4                /* 日志项空*/
#define OPRB_STR_BUFFER_FULL -3               /* 日志字符串缓存满*/
#define OPRB_LOG_ITEM_FULL -2                 /* 日志项缓存满*/
#define OPRB_FAILED -1                        /* 通过错误*/
#define OPRB_OK     0                         /* 正常*/

#define OPRB_LOG_ITEM_MAX_LEN  1000     /*最大缓存日志条目*/
#define OPRB_STR_BUFFER_MAX_LEN 40960  /*最大缓存日志字符数量*/

typedef struct
{
    short int str_len;
}oprb_logitem;

typedef struct
{
    oprb_logitem log_item[OPRB_LOG_ITEM_MAX_LEN];
    int log_item_writer;
    int log_item_reader;
    int log_item_used_len;

    char str_buffer[OPRB_STR_BUFFER_MAX_LEN];    
    int str_buffer_writer;
    int str_buffer_reader;
    int str_buffer_used_len;
}oprb_ringbuffer;


/**
********************************************************************************
  * @explanation oprb_writeline 写一行日志
  * @param in_str[in] 写入日志的字符串指针
  * @return > 0:写入日志字符长度； < 0: 错误码
  * @remarks Important: 1.如果ring buffer满，返回错误码;
  * 2.本函数写日志内部不自动添加换行符，使用者在外部根据需要自行添加.
 ********************************************************************************
*/
int oprb_writeline(char* in_str);

/**
********************************************************************************
  * @explanation oprb_readline 读一行日志
  * @param out_str[out] 读出日志存放的buff指针
  * @param len[in]    读出日志存放的buff长度
  * @return > 0:读出日志的字符长度； < 0: 错误码
  * @remarks Important: 1.如果ring buffer空，返回错误码;
 ********************************************************************************
*/
int oprb_readline(char *out_str, int len);

#ifdef OPRB_UTEST
    oprb_ringbuffer oprb_get_ringbuffer();

    #ifdef __cplusplus
    }
    #endif
#endif



#endif//#ifndef _OPEN_RINGBUFFER_H_